#ifndef GYRO_FLOW_PORT_QUEUEUTIL_H
#define GYRO_FLOW_PORT_QUEUEUTIL_H

#include <pthread.h>
#include "stdio.h"
#include "stdlib.h"
#include "BasicType.h"

// 定义队列节点结构
typedef struct Node {
    int timeStamp;
    Quaternion q;//原始方向四元数
    Quaternion qInv;//原始方向四元数的逆
    Quaternion diffQ;//平滑后的四元数到原始四元数之间的旋转
    struct Node* next;
} Node;

// 定义队列结构
typedef struct {
    Node* front;
    Node* rear;
    int length; // 用于表示队列长度
    int max_length; // 最大队列长度，即队列容量
    pthread_mutex_t mutex; // 互斥锁
} Queue;

// 初始化队列
void queue_init(Queue* q, int max_length);

// 入队
bool enqueue(Queue* q, Quaternion data, Quaternion diffQ, int timeStamp);

// 出队
bool dequeue(Queue* queue, int* timestamp, Quaternion* quaternion, Quaternion* diffQ);

//获取Queue长度
int getQueueLength(const Queue* q);

// 获取队列的头节点值
Node* getFront(Queue* queue);

//清空队列
void clearQueue(Queue* q);

//复制队列最后一个元素
Node* getLastElement(const Queue* q);

//复制队列第一个元素
Node* getFirstElement(const Queue* q);

#endif //GYRO_FLOW_PORT_QUEUEUTIL_H
